home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / vidhrdw / ultraman.c < prev    next >
C/C++ Source or Header  |  2000-03-29  |  4KB  |  151 lines

  1. #include "driver.h"
  2. #include "tilemap.h"
  3. #include "vidhrdw/generic.h"
  4. #include "vidhrdw/konamiic.h"
  5.  
  6. #define SPRITEROM_MEM_REGION REGION_GFX1
  7. #define ZOOMROM0_MEM_REGION REGION_GFX2
  8. #define ZOOMROM1_MEM_REGION REGION_GFX3
  9. #define ZOOMROM2_MEM_REGION REGION_GFX4
  10.  
  11. static int sprite_colorbase, zoom_colorbase[3];
  12.  
  13. extern unsigned char* ultraman_regs;
  14.  
  15. /***************************************************************************
  16.  
  17.   Callbacks for the K051960
  18.  
  19. ***************************************************************************/
  20.  
  21. static void sprite_callback(int *code,int *color,int *priority)
  22. {
  23.     *priority = (*color & 0x80) >> 7;
  24.     *color = sprite_colorbase + ((*color & 0x7e) >> 1);
  25. }
  26.  
  27.  
  28. /***************************************************************************
  29.  
  30.   Callbacks for the K051316
  31.  
  32. ***************************************************************************/
  33.  
  34. static void zoom_callback_0(int *code,int *color)
  35. {
  36.     unsigned short data = READ_WORD(&ultraman_regs[0x18]);
  37.     *code |= ((*color & 0x07) << 8) | (data & 0x02) << 10;
  38.     *color = zoom_colorbase[0] + ((*color & 0xf8) >> 3);
  39. }
  40.  
  41. static void zoom_callback_1(int *code,int *color)
  42. {
  43.     unsigned short data = READ_WORD(&ultraman_regs[0x18]);
  44.     *code |= ((*color & 0x07) << 8) | (data & 0x08) << 8;
  45.     *color = zoom_colorbase[1] + ((*color & 0xf8) >> 3);
  46. }
  47.  
  48. static void zoom_callback_2(int *code,int *color)
  49. {
  50.     unsigned short data = READ_WORD(&ultraman_regs[0x18]);
  51.     *code |= ((*color & 0x07) << 8) | (data & 0x20) << 6;
  52.     *color = zoom_colorbase[2] + ((*color & 0xf8) >> 3);
  53. }
  54.  
  55.  
  56.  
  57. /***************************************************************************
  58.  
  59.     Start the video hardware emulation.
  60.  
  61. ***************************************************************************/
  62.  
  63. int ultraman_vh_start(void)
  64. {
  65.     sprite_colorbase = 192;
  66.     zoom_colorbase[0] = 0;
  67.     zoom_colorbase[1] = 64;
  68.     zoom_colorbase[2] = 128;
  69.  
  70.     if (K051960_vh_start(SPRITEROM_MEM_REGION,NORMAL_PLANE_ORDER,sprite_callback))
  71.     {
  72.         return 1;
  73.     }
  74.  
  75.     if (K051316_vh_start_0(ZOOMROM0_MEM_REGION,4,zoom_callback_0))
  76.     {
  77.         K051960_vh_stop();
  78.         return 1;
  79.     }
  80.  
  81.     if (K051316_vh_start_1(ZOOMROM1_MEM_REGION,4,zoom_callback_1))
  82.     {
  83.         K051960_vh_stop();
  84.         K051316_vh_stop_0();
  85.         return 1;
  86.     }
  87.  
  88.     if (K051316_vh_start_2(ZOOMROM2_MEM_REGION,4,zoom_callback_2))
  89.     {
  90.         K051960_vh_stop();
  91.         K051316_vh_stop_0();
  92.         K051316_vh_stop_1();
  93.         return 1;
  94.     }
  95.  
  96.     K051316_set_offset(0, 8, 0);
  97.     K051316_set_offset(1, 8, 0);
  98.     K051316_set_offset(2, 8, 0);
  99.  
  100.     return 0;
  101. }
  102.  
  103. void ultraman_vh_stop(void)
  104. {
  105.     K051960_vh_stop();
  106.     K051316_vh_stop_0();
  107.     K051316_vh_stop_1();
  108.     K051316_vh_stop_2();
  109. }
  110.  
  111.  
  112.  
  113. /***************************************************************************
  114.  
  115.     Display Refresh
  116.  
  117. ***************************************************************************/
  118.  
  119. void ultraman_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh)
  120. {
  121.     int i;
  122.  
  123.     K051316_tilemap_update_0();
  124.     K051316_tilemap_update_1();
  125.     K051316_tilemap_update_2();
  126.  
  127.     palette_init_used_colors();
  128.     K051960_mark_sprites_colors();
  129.  
  130.     /* set transparent pens for the K051316 */
  131.     for (i = 0;i < 64;i++)
  132.     {
  133.         palette_used_colors[(zoom_colorbase[0] + i) * 16] = PALETTE_COLOR_TRANSPARENT;
  134.         palette_used_colors[(zoom_colorbase[1] + i) * 16] = PALETTE_COLOR_TRANSPARENT;
  135.         palette_used_colors[(zoom_colorbase[2] + i) * 16] = PALETTE_COLOR_TRANSPARENT;
  136.     }
  137.  
  138.     if (palette_recalc())
  139.         tilemap_mark_all_pixels_dirty(ALL_TILEMAPS);
  140.  
  141.     tilemap_render(ALL_TILEMAPS);
  142.  
  143.     fillbitmap(bitmap,Machine->pens[zoom_colorbase[2] * 16],&Machine->drv->visible_area);
  144.  
  145.     K051316_zoom_draw_2(bitmap,0);
  146.     K051316_zoom_draw_1(bitmap,0);
  147.     K051960_sprites_draw(bitmap,0,0);
  148.     K051316_zoom_draw_0(bitmap,0);
  149.     K051960_sprites_draw(bitmap,1,1);
  150. }
  151.